package com.niiwoo.civet.trade.service.invest;

import com.niiwoo.civet.trade.dto.common.ContractInvestOrderDTO;
import com.niiwoo.civet.trade.dto.request.InvestAmountStatisticsRequestDTO;
import com.niiwoo.civet.trade.dto.request.InvestOrderListForActivityRequestDTO;
import com.niiwoo.civet.trade.dto.request.InvestOrderStatusRequestDTO;
import com.niiwoo.civet.trade.dto.request.ProjectBorrowerPlanRequestDTO;
import com.niiwoo.civet.trade.dto.request.intelligenceInvest.IntelligenceProtocolloRequestDTO;
import com.niiwoo.civet.trade.dto.response.*;
import com.niiwoo.civet.trade.dto.response.ProjectDetailDTO;
import com.niiwoo.tripod.provider.dto.response.PageResponseDTO;

import java.math.BigDecimal;
import java.util.List;

/**
 * Created by lujing on 2018/5/15.
 */
public interface InvestOrderDubboService {
    /**
     * 查询用户投资订单的数据统计
     *
     * @param userId
     * @return
     */
    InvestOrderStatisticsResponseDTO queryInvestOrderStatistcs(String userId);

    /**
     * 投资人列表（通过状态不同区分）
     *
     * @param investOrderStatusRequestDTO
     * @return
     */
    PageResponseDTO<InvestOrderStatusResponseDTO> queryInvestOrderList(InvestOrderStatusRequestDTO investOrderStatusRequestDTO);

    InvestStatusResponseDTO queryInvestOrderDetail(Long projectInvestOrderId);

    InvestOrderMaxandMinDateResponseDTO getMyInvestOrderMaxandMinDate(String userId,Byte type);

    default InvestOrderMaxandMinDateResponseDTO getMyInvestOrderMaxandMinDate(String userId, Byte type, Byte queryType){
        throw new UnsupportedOperationException("未实现的方法");
    }

    BigDecimal getMaxRate();

    UserHasInvestResponseDTO checkUserHasInvest(String userId);
    /**
     * 获取合同信息
     * @param orderId
     * @param userId
     * @return
     */
	default InvestProtocolloResponseDTO queryInvestProtocollo(Long orderId, String userId) {
		throw new UnsupportedOperationException("未实现的方法");
	}

	/**
	 * 活动中心查询活动期间的投资订单
	 *
	 * @param requestDTO
	 * @return
	 */
	default InvestOrderListForActivityResponseDTO getInvestOrderListForActivity(InvestOrderListForActivityRequestDTO requestDTO) {
		throw new UnsupportedOperationException("unimplemented");
	}

    PageResponseDTO<ProjectBorrowerPlanResponseDTO> getPlanByProjectId(ProjectBorrowerPlanRequestDTO requestDTO);

    /**
     * 通过标的ID查询所有订单
     * @return resultList
     */
    default List<ContractInvestOrderDTO> selectInvestSuccessList(Long projectId){
        throw new UnsupportedOperationException("未实现的方法");
    }

    /**
     * 查询用户投资该标的且支付成功的金额
     * @return resultList
     */
    default List<ContractInvestOrderDTO> selectInvestedByProjectIdAndUserId(String userId, Long projectId){
        throw new UnsupportedOperationException("未实现的方法");
    }

    /**
     * 我的投资金额统计
     * @param requestDTO 请求dto
     * @return InvestAmountStatisticsResponseDTO
     */
    default InvestAmountStatisticsResponseDTO myInvestAmountStatistics(InvestAmountStatisticsRequestDTO requestDTO){
        throw new UnsupportedOperationException("未实现的方法");
    }

    /**
     * 查询用户今日待收
     * @param requestDTO
     * @return
     */
    default BigDecimal getTodayReturnMoney(InvestAmountStatisticsRequestDTO requestDTO){
        throw new UnsupportedOperationException("未实现的方法");
    }

    /**
     * 查询智能投合同
     * @param requestDTO 请求dto
     * @return InvestProtocolloResponseDTO
     */
    default InvestProtocolloResponseDTO queryIntelligenceInvestProtocollo(IntelligenceProtocolloRequestDTO requestDTO) {
        throw new UnsupportedOperationException("未实现的方法");
    }

    default Long getProjectIdByInvestOrderId(Long investOrderId) {
        throw new UnsupportedOperationException("未实现的方法");
    }

}
